package com.uff.hmstpa.model;

import com.uff.hmstpa.model.observer.AppointmentsObserver;
import com.uff.hmstpa.model.domain.entity.AbstractDoctor;
import com.uff.hmstpa.model.domain.valueobject.Appointment;
import com.uff.hmstpa.model.domain.valueobject.Patient;
import java.util.ArrayList;
import org.joda.time.DateTime;

public interface ScheduleSystem {

    void init();

    public AbstractDoctor createDoctor(String name);

    public void addDoctor(AbstractDoctor doctor);

    public ArrayList<AbstractDoctor> retrieveDoctors();

    public void setSelectedDoctor(AbstractDoctor selectedDoctor);

    public AbstractDoctor getSelectedDoctor();

    /*
     * Métodos oferecidos pelo sistema de agendamento para criação, edição e
     * remoção de consultas
     */
    void createAppointment(AbstractDoctor doctor, Patient patient, DateTime time);

    void editAppointment(Appointment appointment);

    void deleteAppointment(Appointment appointment);

    /*
     * Métodos do Observers do modelo
     */
    void registerObserver(AppointmentsObserver o);

    void removeObserver(AppointmentsObserver o);

    void notifyObservers();
}
